Segmentation fault 11 in MacOS X- C++ [migrated]

Posted by Marcos Cesar Vargas Magana on Programmers See other posts from Programmers or by Marcos Cesar Vargas Magana
Published on 2012-10-07T02:51:49Z Indexed on 2012/10/07 3:51 UTC
Read the original article Hit count: 341

Filed under:

all. I have a "segmentation fault 11" error when I run the following code. The code actually compiles but I get the error at run time.

//** Terror.h **

#include <iostream>
#include <string>
#include <map>

using std::map;
using std::pair;
using std::string;

template<typename Tsize>
class Terror
{
    public:
    //Inserts a message in the map.
    static Tsize    insertMessage(const string& message)
    {
        mErrorMessages.insert( pair<Tsize, string>(mErrorMessages.size()+1, message) );
        return mErrorMessages.size();
    }

    private:
    static map<Tsize, string>       mErrorMessages;
}

template<typename Tsize>
map<Tsize,string> Terror<Tsize>::mErrorMessages;

//** error.h **

#include <iostream>
#include "Terror.h"

typedef unsigned short errorType;
typedef Terror<errorType>   error;
errorType memoryAllocationError=error::insertMessage("ERROR: out of memory.");

//** main.cpp **

#include <iostream>
#include "error.h"
using namespace std;

int main()
{   
    try
    {
        throw error(memoryAllocationError);
    }
    catch(error& err)
    {
    }
}

I have kind of debugging the code and the error happens when the message is being inserted in the static map member. An observation is that if I put the line:

errorType memoryAllocationError=error::insertMessage("ERROR: out of memory.");

inside the "main()" function instead of at global scope, then everything works fine. But I would like to extend the error messages at global scope, not at local scope. The map is defined static so that all instances of "error" share the same error codes and messages. Do you know how can I get this or something similar.

Thank you very much.

© Programmers or respective owner

Related posts about c++